package njust.csc.aecore.utils

import soot.jimple.infoflow.InfoflowConfiguration
import soot.jimple.infoflow.android.InfoflowAndroidConfiguration
import soot.jimple.infoflow.android.SetupApplication

/**
 * @Author ZhouHang
 * @Date 24/6/9 周日
 */
@Deprecated("不再使用")
object SetupUtils {
    fun setupFlowDroid(apkPath: String): SetupApplication {
        // 构造调用图的算法 可以是 SPARK 和 CHA
        val cgAlgorithm = InfoflowConfiguration.CallgraphAlgorithm.SPARK

        val config = InfoflowAndroidConfiguration()
        config.analysisFileConfig.targetAPKFile = apkPath
        config.analysisFileConfig.androidPlatformDir = PathUtils.ANDROID_JAR.toAbsolutePath().toString()

        // FlowDroid 默认会消除未使用的代码，这里禁止消除（不进行 constant propagation）
        config.codeEliminationMode = InfoflowConfiguration.CodeEliminationMode.NoCodeElimination

        // 实际 apk 中往往会有很多 dex 文件，开启该选项后可以全部分析
        config.mergeDexFiles = true

        // 启用反射机制？
        config.enableReflection = true
        config.callgraphAlgorithm = cgAlgorithm
        return SetupApplication(config)
    }
}
